home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CUCD / Programming / OUI / envman.lha / EnvManager / rcs / envopt.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-23  |  7.3 KB  |  275 lines

  1. head    1.1;
  2. access;
  3. symbols;
  4. locks
  5.     dlorre:1.1; strict;
  6. comment    @// @;
  7.  
  8.  
  9. 1.1
  10. date    96.08.23.16.57.28;    author dlorre;    state Exp;
  11. branches;
  12. next    ;
  13.  
  14.  
  15. desc
  16. @EnvManager : Gestionnaire d'Environnement
  17. Auteur : Dominique Lorre
  18. @
  19.  
  20.  
  21. 1.1
  22. log
  23. @Initial revision
  24. @
  25. text
  26. @#include <exec/types.h>
  27. #include <graphics/gfxbase.h>
  28. #include <libraries/gadtools.h>
  29. #include <cxxproto/dos.h>
  30. #include <cxxproto/graphics.h>
  31. #include <cclib/macros.h>
  32. #include <stdio.h>
  33. #include <string.h>
  34. #include <unistd.h>
  35.  
  36. #include <screen.h>
  37. #include <gadgets/checkbox.h>
  38. #include <gadgets/string.h>
  39. #include <gadgets/cnumber.h>
  40. #include <gadgets/cstring.h>
  41. #include <gadgets/fbutton.h>
  42. #include <filesel_protos.h>
  43. #include <locale.h>
  44.  
  45. #include "envdef.h"
  46. #include "envopt.h"
  47. #include "enventry.h"
  48.  
  49. IMPORT TTextAttr    Tiny ;
  50. IMPORT TTextAttr    Normal ;
  51. IMPORT enventry     *curenv ;
  52. IMPORT nlist        *envlist ;
  53. IMPORT nlist        *envarclist ;
  54.  
  55. long okid, cancelid ;
  56. static char filename[256] ;
  57. static char path[256] ;
  58. static char comment[256] ;
  59.  
  60. IMPORT lstring __far alias ;
  61. IMPORT lstring __far local2 ;
  62. IMPORT lstring __far global2 ;
  63. IMPORT lstring __far archived ;
  64. IMPORT lstring __far binary ;
  65. IMPORT lstring __far nullterm ;
  66. IMPORT lstring __far vsize ;
  67. IMPORT lstring __far contents ;
  68. IMPORT lstring __far contents2 ;
  69. IMPORT lstring __far name ;
  70. IMPORT lstring __far edit ;
  71. IMPORT lstring __far import ;
  72. IMPORT lstring __far export ;
  73. IMPORT lstring __far edition ;
  74. IMPORT lstring __far importfrom ;
  75. IMPORT lstring __far exportto ;
  76.  
  77.  
  78.  
  79. void optwindow::fedit(gadget *g, ULONG classe, USHORT code)
  80. {
  81. char Cmd[255] ;
  82. char TmpName[255] ;
  83. char EdName[255] ;
  84. BPTR tmp ;
  85. FileInfoBlock __aligned fib ;
  86. enventry    *edenv ;
  87.  
  88.  
  89.     if (edenv = findvar("EDITOR"))
  90.         strcpy(EdName, edenv->contents) ;
  91.     else
  92.         strcpy(EdName, "Ed") ;
  93.  
  94.     strcpy(TmpName, "T:EnvManXXXXXXXX") ;
  95.     mktemp(TmpName) ;
  96.     tmp = Open(TmpName, MODE_NEWFILE) ;
  97.     if (tmp) {
  98.         Write(tmp, curenv->contents, curenv->size) ;
  99.         Close(tmp) ;
  100.         strcpy(Cmd, EdName) ;
  101.         strcat(Cmd, " ") ;
  102.         strcat(Cmd, TmpName) ;
  103.         System(Cmd, NULL) ;
  104.         tmp = Open(TmpName, MODE_OLDFILE) ;
  105.         if (tmp) {
  106.             ExamineFH(tmp, &fib) ;
  107.             curenv->size = fib.fib_Size ;
  108.             delete curenv->contents ;
  109.             curenv->contents = new char[curenv->size+1] ;
  110.             Read(tmp, curenv->contents, curenv->size) ;
  111.             curenv->contents[curenv->size] = '\0' ;
  112.             curenv->setentry() ;
  113.             Close(tmp) ;
  114.             DeleteFile(TmpName) ;
  115.         }
  116.     }
  117. }
  118.  
  119. void optwindow::fimport(gadget *g, ULONG classe, USHORT code)
  120. {
  121. BPTR fic ;
  122. char    file[256] ;
  123. FileInfoBlock __aligned fib ;
  124.  
  125.     if (getfile(ws, filename, importfrom, path, NULL)) {
  126.         strcpy(file, path) ;
  127.         AddPart(file, filename, 256) ;
  128.         fic = Open(file, MODE_OLDFILE) ;
  129.         if (fic) {
  130.             ExamineFH(fic, &fib) ;
  131.             curenv->size = fib.fib_Size ;
  132.             delete curenv->contents ;
  133.             curenv->contents = new char[curenv->size+1] ;
  134.             Read(fic, curenv->contents, curenv->size) ;
  135.             curenv->contents[curenv->size] = '\0' ;
  136.             curenv->setentry() ;
  137.             if (scontents)
  138.                 scontents->set(curenv->contents) ;
  139.             Close(fic) ;
  140.         }
  141.     }
  142. }
  143.  
  144. void optwindow::fexport(gadget *g, ULONG classe, USHORT code)
  145. {
  146. BPTR    fic ;
  147. char    file[256] ;
  148.  
  149.     if (getfile(ws, filename, exportto, path, comment)) {
  150.         strcpy(file, path) ;
  151.         AddPart(file, filename, 256) ;
  152.         fic = Open(file, MODE_NEWFILE) ; // Tester l'overwrite qd même !
  153.         if (fic) {
  154.             Write(fic, curenv->contents, curenv->size) ;
  155.             Close(fic) ;
  156.             SetComment(file, comment) ;
  157.         }
  158.     }
  159. }
  160.  
  161. void optwindow::handlevkey(USHORT code)
  162. {
  163.     if (code == 0x0D) {
  164.         g->selectgadget(okid, FALSE) ;
  165.     }
  166.     else if (code == 0x1B) {
  167.         g->selectgadget(cancelid, FALSE) ;
  168.     }
  169.     else {
  170.         g->parsegadgets(code) ;
  171.     }
  172. }
  173.  
  174. void optwindow::open(screen *ns)
  175. {
  176. long mw ;
  177. long ml ;
  178. long bh ;
  179. long bw ;
  180. gadget *l ;
  181.  
  182.     ws = ns ;
  183.     g = new gadgetlist(this, 16) ;
  184.  
  185.     g->setfont(&Normal) ;
  186.     bh = g->fontheight ;
  187.     bw = MAX((bh*ws->xratio)/ws->yratio, g->fontheight) ;
  188.     // Colonne 1
  189.  
  190.     mw = g->lmax(alias, local2, global2, archived, NULL) + 20 ;
  191.  
  192.     g->box(mw, ws->winbarheight+8, bw, bh) ;
  193.     new checkbox(g, NULL, alias, curenv->isalias(), PLACETEXT_LEFT, TRUE) ;
  194.  
  195.     g->box(g->left, g->maxh+8, bw, bh) ;
  196.     new checkbox(g, NULL, local2, curenv->islocale(), PLACETEXT_LEFT, TRUE) ;
  197.  
  198.     g->box(g->left, g->maxh+8, bw, bh) ;
  199.     cglob = new checkbox(g, NULL, global2, curenv->isglobal(), PLACETEXT_LEFT, curenv->isalias()) ;
  200.  
  201.     g->box(g->left, g->maxh+8, bw, bh) ;
  202.     carch = new checkbox(g, NULL, archived, curenv->isarchived(), PLACETEXT_LEFT, curenv->isalias()) ;
  203.  
  204.     // Colonne 2
  205.  
  206.     mw = g->lmax(binary, nullterm, vsize, NULL) + 20 ;
  207.     g->box(g->maxw+mw, ws->winbarheight+8, bw, bh) ;
  208.     new checkbox(g, NULL, binary, curenv->isbinary(), PLACETEXT_LEFT, TRUE) ;
  209.  
  210.     g->box(g->left, g->top+g->height+8, bw, bh) ;
  211.     new checkbox(g, NULL, nullterm, curenv->isnullterm(), PLACETEXT_LEFT, TRUE) ;
  212.  
  213.     g->box(g->left, g->top+g->height+8, g->ltext("99999")+8, g->fontheight+4) ;
  214.     new cnumber(g, NULL, vsize, curenv->size, TRUE, PLACETEXT_LEFT) ;
  215.  
  216.     // Colonne 3
  217.     mw = g->lmax(name, contents, NULL) ;
  218.     ml = g->maxw+8 ;
  219.  
  220.     g->box(ml, ws->winbarheight+8, mw+8, g->fontheight+4) ;
  221.     new cstring(g, NULL, name, NULL, FALSE, PLACETEXT_IN) ;
  222.  
  223.     g->box(g->maxw+8, g->top, 200, g->fontheight+4) ;
  224.     new string(g, NULL, NULL, curenv->name, MAX(strlen(curenv->name)+1, MAXNAME)) ;
  225.  
  226.  
  227.     if (curenv->isbinary() || curenv->islocale() || curenv->isalias()) {
  228.         g->box(ml, g->top+g->height+8, mw+8, g->fontheight+4) ;
  229.         new cstring(g, NULL, contents2, NULL, FALSE, PLACETEXT_IN) ;
  230.         g->box(g->left+g->width+8, g->top, 200, g->fontheight+4) ;
  231.         new cstring(g, NULL, NULL, curenv->contents,TRUE, PLACETEXT_IN) ;
  232.         scontents = NULL ;
  233.     }
  234.     else {
  235.         g->box(ml, g->top+g->height+8, mw+8, g->fontheight+4) ;
  236.         new cstring(g, NULL, contents, NULL, FALSE, PLACETEXT_IN) ;
  237.         g->box(g->left+g->width+8, g->top, 200, g->fontheight+4) ;
  238.         scontents = new string(g, NULL, NULL, curenv->contents, MAX(curenv->size+1, MAXNAME)) ;
  239.     }
  240.  
  241.     mw = g->lmax(edit, import, export, NULL) + 8 ;
  242.  
  243.     if (curenv->isbinary() && curenv->isnullterm()) {
  244.         g->box(g->left, g->top+g->height+8, mw, g->fontheight+4) ;
  245.         new fbutton(g, WFUNC(&optwindow::fedit), edit, FALSE) ;
  246.     }
  247.     if (!curenv->isalias() && !curenv->islocale()) {
  248.         g->box(g->left, g->top+g->height+8, mw, g->fontheight+4) ;
  249.         new fbutton(g, WFUNC(&optwindow::fimport), import, FALSE) ;
  250.     }
  251.  
  252.     g->box(g->left, g->top+g->height+8, mw, g->fontheight+4) ;
  253.     l = new fbutton(g, WFUNC(&optwindow::fexport), export, FALSE) ;
  254.  
  255.     okid = l->id + 1 ;
  256.     cancelid = l->id + 2 ;
  257.  
  258.     width = short(g->maxw-ws->screen->WBorLeft+20) ;
  259.     height = short(g->maxh-ws->winbarheight+8) ;
  260.  
  261.     prepbox(TRUE) ;
  262.  
  263.     _open(NULL, SCROLLERIDCMP|ARROWIDCMP|STRINGIDCMP|BUTTONIDCMP|
  264.                 IDCMP_VANILLAKEY|IDCMP_MOUSEBUTTONS,
  265.         WA_Title,           edition,
  266.         WA_Gadgets,         g->glist,
  267.         WA_DragBar,         TRUE,
  268.         WA_DepthGadget,     TRUE,
  269.         WA_Activate,        TRUE,
  270.         TAG_DONE) ;
  271.  
  272.     if (initok) g->updategadgets() ;
  273. }
  274. @
  275.